/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package spaceinvaders.personagens;

import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import spaceinvaders.sistema.Sistema;

/**
 * Classe para ajudar a fazer personagens, explosao e tiro.
 * @author Danilo Augusto Silva
 */
public class PersonagemFactory {

    /**
     * Facilitacao para pegar instancia.
     */

    public enum TipoPersonagem {

        CANNON, INVADER_BOT, INVADER_MID, INVADER_TOP, INVADER_BONUS, SHOOT,
        EXPLOSION
    }

    /**
     * Construtor privado para que não existam objetos do tipo PersonagemFactory.
     */

    private PersonagemFactory() {
        //Nao podem criar objetos deste tipo
    }

    /**
     * metodo para fazer um personagem do tipo "tipo".
     * @param sistema = objeto responsavel pelo sistema principal do jogo.
     * @param tipo = tipo do personagem (se é canhao, invasor, tiro, explosao)
     * @return retorna um novo objeto do tipo especificado.
     */

    public static Personagem getInstance(Sistema sistema, TipoPersonagem tipo) {
        if (tipo == TipoPersonagem.CANNON) {
            Image[] imagens = new Image[7];

            for (int i = 0; i < imagens.length; i++) {
                String filename = "/images/cannon.png";
                URL url = PersonagemFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url).getScaledInstance(40, 30, Image.SCALE_DEFAULT);
            }
            return new Cannon(sistema, imagens);
        } else if (tipo == TipoPersonagem.INVADER_BOT) {
            Image[] imagens = new Image[2];
            
            for (int i = 0; i<imagens.length; i++) {
                String filename = "/images/invaderbot" + i + ".png";
                URL url = PersonagemFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);                        
            }
            return new InvaderBot(sistema, imagens);
        } else if (tipo == TipoPersonagem.INVADER_MID) {
            Image[] imagens = new Image[2];
            
            for (int i = 0; i< imagens.length; i++){
                String filename = "/images/invadermid" + i + ".png";
                URL url = PersonagemFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            return new InvaderMid(sistema, imagens);
        } else if (tipo == TipoPersonagem.INVADER_TOP) {
            Image[] imagens = new Image[2];

            for (int i = 0; i< imagens.length; i++){
                String filename = "/images/invadertop" + i + ".png";
                URL url = PersonagemFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            return new InvaderTop(sistema, imagens);
        } else if (tipo == TipoPersonagem.INVADER_BONUS) {
            Image[] imagens = new Image[2];

            for (int i = 0; i< imagens.length; i++){
                String filename = "/images/invaderbonus.png";
                URL url = PersonagemFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            return new InvaderBonus(sistema, imagens);
        }

        else
        if (tipo == TipoPersonagem.SHOOT) {
        Image[] imagens = new Image[2];


        for (int i = 0; i<imagens.length; i++) {
        String filename = "/images/hadouken.png";
        URL url = PersonagemFactory.class.getResource(filename);
        imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
        }
        return new Shoot(sistema,imagens);
        } else if (tipo == TipoPersonagem.EXPLOSION) {
            Image[] imagens = new Image[4];

            for (int i = 0; i< imagens.length; i++){
                String filename = "/images/explosion" + i + ".png";
                URL url = PersonagemFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url).getScaledInstance(30, 30, Image.SCALE_DEFAULT);
            }
            return new Explosion(sistema, imagens);
            }


        return null;

    }
/*
    public static Personagem getShootInstance(Sistema sistema, Point pt) {
        Image[] imagens = new Image[1];


        for (int i = 0; i < imagens.length; i++) {
            String filename = "/images/shoot" + i + ".png";
            URL url = PersonagemFactory.class.getResource(filename);
            imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
        }
        return new Shoot(sistema, imagens, pt);
    } */
}
